import * as echarts from '../../ec-canvas/echarts';

const app = getApp();


function getOption()
{
  return{
    backgroundColor: "#000000",
     series: [{
       name: '虚拟仪表',
       type: 'gauge',
       min: 0, // 设置仪表盘的最小值
       max: 1500, // 设置仪表盘的最大值，这里假设你希望最大值为200
       detail: {
         formatter: '{value}',
         textStyle: {
           color: '#00ffff' // 设置字体颜色为浅蓝
         }
       },
       axisLine: {
         show: true
       },
       axisLabel: {
         color: '#ffffff' // 设置刻度标签字体颜色为白色
       },
       title: {
         textStyle: {
           color: '#00FF00' // 设置标题字体颜色为绿色
         }
       },
       data: [{
         value: 0,
         name: 'Rpm',
       }]

     }]
   };
}

Page({
  data: {
    ec: {
      ecload: true
    },
    paras: [
      { "id": 0, "name": "电机转速",   "value":'',"sendvalue":0,"index": 325,   "datatype":0,"Comments":''},
      { "id": 1, "name": "整车车速",   "value":'',"sendvalue":0,"index": 362,   "datatype":0,"Comments":''},
      { "id": 2, "name": "电池电压",   "value":'',"sendvalue":0,"index": 333,   "datatype":0,"Comments":''},
      { "id": 3, "name": "电池电流",    "value":'',"sendvalue":0,"index": 334,   "datatype":0,"Comments":''},
      { "id": 4, "name": "控制器温度",  "value":'',"sendvalue":0,"index": 336,   "datatype":0,"Comments":''},

    ],
    YiBiao:0,//仪表显示数据
    dispid:0,//当前显示位置
    dispidlast:0,//当前显示位置
    lastTapTime: 0, // 记录上次屏幕点击的时间戳
    delaycnt:0,//仪表切换显示强制0等待次数。
  },

    onLoad:function(options) {
      this.ecComponent  = this.selectComponent('#mychart-dom-gauge');//获取组件实例
      this.init()

    },
    init(){//手动初始化
      this.ecComponent.init((canvas, width, height, dpr) =>{
        let chart = echarts.init(canvas, null, {
          width: width,
          height: height,
          devicePixelRatio: dpr // new
        });
        
        let option =getOption()
       // canvas.setChart(chart);
        chart.setOption(option, true);
        this.chart = chart;//图标实例绑定到this,方便其他地方使用
        return chart;
      })

    },

    onShow: function() {
      wx.setKeepScreenOn({ keepScreenOn: true }); // 常亮
      this.interval = setInterval(() => {
        this.updataview();
      }, 400); // 报文周期处理，200ms周期

      wx.showToast({
        title: '请双击屏幕切换显示',
        icon: 'none', // 提示框的图标，可选值：'success', 'loading', 'none'（默认值）
        duration: 3000, // 提示框显示时间（毫秒），默认值为 1500
        mask: false // 是否显示透明蒙层，避免触摸穿透，可选值：true，false（默认值）
      })
    },

  onHide: function () { 
    wx.setKeepScreenOn({keepScreenOn: false});//关闭常亮   
    clearInterval(this.interval);
  }, 
  onUnload: function () { 
    wx.setKeepScreenOn({keepScreenOn: false});//关闭常亮   
    clearInterval(this.interval);
  },

  DoulbeTap: function (e) {
    const currentTime = e.timeStamp;
    const lastTapTime = this.data.lastTapTime;
    const diff = currentTime - lastTapTime;

    if (diff < 300) { // 如果两次点击的时间间隔小于 300 毫秒，则认为是双击事件
      this.data.YiBiao =0;
      this.data.dispid+=1;//切换到下一个显示
      if(this.data.dispid>4)//轮询一遍，从头开始
      {
        this.data.dispid=0;
      }
      this.data.delaycnt = 0;
    }
    this.setData({
      lastTapTime: currentTime // 更新上次点击的时间戳
    });
  },


  updataview()
  {
     //============================================
    //仪表更换和刷新
    let option =getOption()
    if(this.data.dispid==0)//转速限速范围
    {
      option.series[0].max = 1500;
      option.series[0].data[0].name ='Rpm';
    }
    if(this.data.dispid==1)//车速限速范围
    {
      option.series[0].max = 150;
      option.series[0].data[0].name ='Km/h';
    }
    if(this.data.dispid==2)//电池电压限制范围
    {
      option.series[0].max = 100;
      option.series[0].data[0].name ='V';
    }
    if(this.data.dispid==3)//电池电流限制范围
    {
      option.series[0].max = 100;
      option.series[0].data[0].name ='A';
    }
    if(this.data.dispid==4)//控制器温度限制范围
    {
      option.series[0].max =100;
      option.series[0].data[0].name ='℃';
    }

    option.series[0].data[0].value = this.data.YiBiao;//更新仪表显示数据
    this.chart.setOption(option, true);
   // this.data.YiBiao=0;//显示清零，便于查看蓝牙数据接收情况。

    //===================================================
    //蓝牙重新搜索连接
    if(app.data.bleopen==false)
    {
      app.data.connecttips = '正在打开蓝牙'
      app.data.bleopen = true
      app.data.blefound = false;//清除蓝牙找到标志
      app.openBluetoothAdapter()
    }
    if(app.data.connected==false && app.data.blefound==true )//蓝牙没连接，但已找到
    {
      app.data.connecttips = '正在连接'
      app.createBLEConnection()//自动连接蓝牙
    }
    if(app.data.connected == false) return;//蓝牙未连接，返回
    
    //==================================================
    //蓝牙断线判断
    app.data.mscount++;
    if(app.data.mscount>10)//确认断连
    {
      app.data.mscount = 0;
      app.data.connected=false;//断连，重新连接
    }
    if((app.data.Rebuffi == 0)&&(app.data.mscount>8))//接收的数据为空
    {
      wx.showToast({
        title: '控制器未应答',
        icon: 'none', // 提示框的图标，可选值：'success', 'loading', 'none'（默认值）
        duration: 1000, // 提示框显示时间（毫秒），默认值为 1500
        mask: true // 是否显示透明蒙层，避免触摸穿透，可选值：true，false（默认值）
      })
    }
    //==================================================
    
    if((app.data.Rebuffi>6) && (app.data.BLE_Rebuff[1]==3))//读数据应答，9个字节
    {
      var crc = app.crc16(app.data.BLE_Rebuff,app.data.Rebuffi);
      if(crc==0)//crc校验通过
      {
        var Speed  = ((app.data.BLE_Rebuff[3]<<8)+app.data.BLE_Rebuff[4])+(((app.data.BLE_Rebuff[5]<<8)+app.data.BLE_Rebuff[6])<<16)//组合值
         this.data.YiBiao = (Speed/65536).toFixed(0) //显示值，小数点个数为零
       // this.data.YiBiao+=1;
       if(this.data.delaycnt<1)
       {
         this.data.delaycnt++;
         this.data.YiBiao = 0;
       }
      }
    }

    var Updatapara = this.data.paras;
    var dispid = this.data.dispid;
    if(dispid<0||dispid>4)
    {
      this.data.dispid = 0;
      dispid = 0;
    }
    var addr = Updatapara[dispid].index;//读取参数位置



    app.data.BLE_Txbuff[0]= 0x01
    app.data.BLE_Txbuff[1]= 0x03
    app.data.BLE_Txbuff[2]= ((addr-2)*2)>>8;//高8位地址
    app.data.BLE_Txbuff[3]= ((addr-2)*2)&0x00FF;//低8位地址

    app.data.BLE_Txbuff[4]= 0x00
    app.data.BLE_Txbuff[5]= 0x02
 
    var crc = app.crc16(app.data.BLE_Txbuff,6);
    app.data.BLE_Txbuff[6]= (crc>>8)&0xFF
    app.data.BLE_Txbuff[7]= (crc)&0xFF

    app.data.Txbuffid = 0;
    app.writeBLECharacteristicValue()

  }


});
